// import XLSX from "xlsx";
import * as XLSX from 'xlsx'
import FileSaver from 'file-saver'

/**
 * 异步读取Excel文件的sheet表为json数据
 * 不支持合并单元格
 * @param {File对象} file
 */
export function readExcelToJson(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()

    reader.onload = (e) => {
      // console.log(e)
      let data = new Uint8Array(e.target.result)
      // let data = e.target.result
      let workbook = XLSX.read(data, { type: 'array', cellDates: true })
      // let workbook = XLSX.read(data, { type: 'binary', cellDates: true })
      // console.log('workbook: ', workbook)
      // 将Excel 第一个sheet内容转为json格式
      let worksheet = workbook.Sheets[workbook.SheetNames[0]]
      // console.log('worksheet: ', worksheet)
      // let a1 = worksheet["A1"]

      // range：设置从第几行开始读取内容
      // let json = XLSX.utils.sheet_to_json(workbook.Sheets[sheetList[0]],{range:1})
      let json = XLSX.utils.sheet_to_json(worksheet, { defval: null })
      // 显示原始日期
      // let json = XLSX.utils.sheet_to_json(worksheet, { defval: null, raw: false })
      // console.log('json:', json)
      // console.log("jsonExcel:", jsonExcel)
      json.forEach(item => {
        if (item.委托日期 !== null) {
          item.委托日期 = XLSX.SSF.format('YYYY-MM-DD', item.委托日期)
        }
        if (item.委托完成日期 !== null) {
          item.委托完成日期 = XLSX.SSF.format('YYYY-MM-DD', item.委托完成日期)
        }
        if (item.中标日期 !== null) {
          item.中标日期 = XLSX.SSF.format('YYYY-MM-DD', item.中标日期)
        }
        if (item.要求终验时间 !== null) {
          item.要求终验时间 = XLSX.SSF.format('YYYY-MM-DD', item.要求终验时间)
        }
        if (item.项目团队组建日期 !== null) {
          item.项目团队组建日期 = XLSX.SSF.format('YYYY-MM-DD', item.项目团队组建日期)
        }
        if (item.启动时间 !== null) {
          item.启动时间 = XLSX.SSF.format('YYYY-MM-DD', item.启动时间)
        }
        if (item.实施方案系统提交时间 !== null) {
          item.实施方案系统提交时间 = XLSX.SSF.format('YYYY-MM-DD', item.实施方案系统提交时间)
        }
        if (item.实施方案提交时间 !== null) {
          item.实施方案提交时间 = XLSX.SSF.format('YYYY-MM-DD', item.实施方案提交时间)
        }
        if (item.实施方案确认时间 !== null) {
          item.实施方案确认时间 = XLSX.SSF.format('YYYY-MM-DD', item.实施方案确认时间)
        }
        if (item.计划开工时间 !== null) {
          item.计划开工时间 = XLSX.SSF.format('YYYY-MM-DD', item.计划开工时间)
        }
        if (item.实际开工时间 !== null) {
          item.实际开工时间 = XLSX.SSF.format('YYYY-MM-DD', item.实际开工时间)
        }
        // 第一次采购完成时间 没转换
        // 采购完成时间  没转换
        if (item.计划到货时间 !== null) {
          item.计划到货时间 = XLSX.SSF.format('YYYY-MM-DD', item.计划到货时间)
        }
        if (item.到货时间 !== null) {
          item.到货时间 = XLSX.SSF.format('YYYY-MM-DD', item.到货时间)
        }
        if (item.项目交底时间 !== null) {
          item.项目交底时间 = XLSX.SSF.format('YYYY-MM-DD', item.项目交底时间)
        }
        if (item.项目交底会议时间 !== null) {
          item.项目交底会议时间 = XLSX.SSF.format('YYYY-MM-DD', item.项目交底会议时间)
        }
        // 计划上线时间
        // 上线逾期天数
        if (item.实际上线时间 !== null) {
          item.实际上线时间 = XLSX.SSF.format('YYYY-MM-DD', item.实际上线时间)
        }
        // 业主初验时间
        // 母公司实际初验时间
        if (item.业主终验时间 !== null) {
          item.业主终验时间 = XLSX.SSF.format('YYYY-MM-DD', item.业主终验时间)
        }
        // 母公司计划终验时间
        // 终验逾期天数
        // 母公司实际终验时间
        // 计划转维时间
        // 转维完成时间
        // 更新时间
        if (item.前向合同履行开始时间 !== null) {
          item.前向合同履行开始时间 = XLSX.SSF.format('YYYY-MM-DD', item.前向合同履行开始时间)
        }
        if (item.前向合同履行结束时间 !== null) {
          item.前向合同履行结束时间 = XLSX.SSF.format('YYYY-MM-DD', item.前向合同履行结束时间)
        }
        // 维护结束时间
      })
      resolve(json)
    }
    reader.readAsArrayBuffer(file.raw)
  })
}

/**
 * 保存json为Excel文件
 * @param {*} data
 * @param {*} filename  文件名后缀为.xlsx
 */
export function saveJsonToExcel(data, filename) {
  let sheet = XLSX.utils.json_to_sheet(data)

  let workbook = {
    SheetNames: ['sheet1'],
    Sheets: {
      sheet1: sheet
    }
  }

  let wbout = XLSX.write(workbook, {
    bookType: 'xlsx',
    bookSST: true,
    type: 'array'
  })

  FileSaver.saveAs(
    new Blob([wbout], { type: 'application/octet-stream' }),
    filename
  )
}
